#!/usr/bin/env python
# -*- coding:utf8 -*-
"""
银行相关业务的接口
"""
from db import db_handler
from lib import common

bank_logger = common.get_logger('bank')

# 提现接口
def withdraw_interface(username, money):
    # 1)先获取用户字典
    user_dic = db_handler.select(username)

    # 账户中的金额
    balance = user_dic.get('balance')

    # 提现本金 + 手续费
    money2 = money * 1.05

    # 判断用户金额是否足够
    if balance >= money2:

        # 2)修改用户字典中的金额
        balance -= money2
        user_dic['balance'] = balance

        # 3)记录流水
        flow = f'用户[{username}]提现金额[{money}$],手续费为：[{money2-money}$]'
        user_dic['flow'].append(flow)
        bank_logger.info(flow)
        # 4)在保存数据，或更新数据
        db_handler.save(user_dic)

        return True, flow
    return False, "金额不足"


# 还款接口
def repay_interface(username, money):
    """
    1.获取用户的金额
    2.给用户的金额做加钱操作
    :return:
    """
    # 1.获取用户字典
    user_dic = db_handler.select(username)

    # 2.直接做加钱的操作
    user_dic['balance'] += money

    # 3)记录流水
    flow = f"用户:[{username}]  还款：[{money}$] 成功"
    user_dic['flow'].append(flow)
    bank_logger.info(flow)
    # 4)在保存数据，或更新数据
    db_handler.save(user_dic)
    return True, flow


# 转账接口
def transfer_interface(login_user, to_user, money):
    """
    1.获取 "当前用户" 数据
    2.获取 "目标用户" 数据
    3.获取 转账金额
    :return:
    """
    # 1.获取用户字典
    login_user_dic = db_handler.select(login_user)

    # 2.获取 "目标用户" 数据
    to_user_dic = db_handler.select(to_user)

    # 3.判断目标用户是否存在
    if not to_user_dic:
        return False, "目标用户不存在"

    # 4.若用户存在，则判断"当前用户的转账金额" 是否足够
    if login_user_dic['balance'] >= money:
        # 5.若足够，则开始给目标用户转账
        # 5.1)给当前用户的数据，做减钱操作
        login_user_dic['balance'] -= money

        # 5.2)给目标用户的数据，做加钱操作
        to_user_dic['balance'] += money

        # 6.记录当前用户与目标用户的流水
        login_user_flow = f"用户[{login_user}] 给 用户：[{to_user}] 转账：[{money}$] 成功]"
        login_user_dic['flow'].append(login_user_flow)

        to_user_flow = f"用户[{to_user}] 接收 用户：[{login_user}] 转账：[{money}$] 成功]"
        to_user_dic['flow'].append(to_user_flow)

        # 7.在保存数据，或更新数据
        # 保存当前用户的数据
        db_handler.save(login_user_dic)
        # 保存目标用户的数据
        db_handler.save(to_user_dic)

        return True, login_user_flow


# 查看流水接口
def check_flow_interface(username):
    user_dic = db_handler.select(username)
    return user_dic['flow']


# 支付接口
def pay_interface(login_user, cost):
    user_dic = db_handler.select(login_user)

    # 判断用户金额是否足够
    if user_dic.get("balance") >= cost:
        user_dic['balance'] -= cost
        flow = f"用户消费金额:[{cost}$]"

        # 记录消费流水
        user_dic['flow'].append(flow)

        # 保存数据
        db_handler.save(user_dic)

        return True

    return False

